/*
 * @Author: your name
 * @Date: 2022-01-11 17:55:22
 * @LastEditTime: 2022-01-12 01:56:30
 * @LastEditors: Please set LastEditors
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: \campus-market-frontend-master\src\services\index.ts
 */
import axios from 'axios'
import store from '../store'
import router from '../router'

/**
 * 定义 axios 的默认配置，所有请求都会应用这个配置。
 */
const defaultConfig = {
  baseURL: import.meta.env.VITE_API_URL,
  headers: {
    'Content-Type': 'application/json'
  }
}
/**
 * axios文件配置，适应图片上传
 */
const fileConfig = {
  baseURL: import.meta.env.VITE_API_URL,
  headers: {
    'Cpmtent-Type': 'multipart/form-data'}
  }

const ImgConfig = {
  baseURL: import.meta.env.VITE_API_URL,
  headers: {
    'Content-Type': 'multipart/form-data'
  }
}

/**
 * 创建 axios 实例，后续所有 API 请求均通过此实例完成。
 *
 * 用法：
 * import instance from '../services'
 * instance.get('/xxx') | post | put | patch | delete | head | options
 *
 * @see https://axios-http.com/zh/docs/intro
 */

const instance = axios.create(defaultConfig)
export const instanceImg = axios.create(ImgConfig)
/**
 * 创建请求拦截器，为每个请求添加 Authorization 认证头部。
 */
instance.interceptors.request.use((config) => {
  const token = store.state.accessToken
  config.headers = config.headers ?? {}
  // 认证头部的格式为 `Authorization: Bearer ${accessToken}`
  config.headers.Authorization = token ? `Bearer ${token}` : ''
  return config
})

/**
 * 创建响应拦截器，当遇到 401 Unauthorized 请求就自动登出，并要求重新登录。
 */
instance.interceptors.response.use(undefined, async (error) => {
  if (error?.response?.status === 401) {
    // 派发登出操作到 vuex
    await store.dispatch('logout')
    // 路由跳转到登录页面
    // await router.push('/auth/frame/login')
  }
  return await Promise.reject(error)
})


// 文件axios请求
export const fileInstance = axios.create(fileConfig)
/**
 * 创建请求拦截器，为每个请求添加 Authorization 认证头部。
 */
fileInstance.interceptors.request.use((config) => {
  const token = store.state.accessToken
  config.headers = config.headers ?? {}
  // 认证头部的格式为 `Authorization: Bearer ${accessToken}`
  config.headers.Authorization = token ? `Bearer ${token}` : ''
  return config
})


/**
 * 创建响应拦截器，当遇到 401 Unauthorized 请求就自动登出，并要求重新登录。
 */
fileInstance.interceptors.response.use(undefined, async (error) => {
  if (error?.response?.status === 401) {
    // 派发登出操作到 vuex
    await store.dispatch('logout')
    // 路由跳转到登录页面
    // await router.push('/auth/frame/login')
  }
  return await Promise.reject(error)
})
export default instance





instanceImg.interceptors.response.use(undefined, async (error) => {
  if (error?.response?.status === 401) {
    // 派发登出操作到 vuex
    await store.dispatch('logout')
    // 路由跳转到登录页面
    await router.push('/auth/frame/login')
  }
  return await Promise.reject(error)
})


instanceImg.interceptors.request.use((config) => {
  const token = store.state.accessToken
  config.headers = config.headers ?? {}
  // 认证头部的格式为 `Authorization: Bearer ${accessToken}`
  config.headers.Authorization = token ? `Bearer ${token}` : ''
  return config
})
